package cn.com.huzo.service.tech;

import cn.com.huzo.model.entities.tech.CostForecastLinesEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * 成本预测表明细管理服务对象接口。
 *
 * @author 范学春
 */
public interface CostForecastLinesManager extends GenericManager<CostForecastLinesEntity, String> {

    /**
     * 根据主表标识，取得明细表数据。
     *
     * @param headerId 成本预测表ID
     * @return 明细列表数据
     * @throws Exception
     */
    List<CostForecastLinesEntity> fetchLinesByHeaderKey(Long headerId) throws Exception;

    /**
     * 增加成本预测明细(选择材料)。
     *
     * @param itemList 要增加数据列表
     * @return 新增后的成本预测明细
     * @throws java.lang.Exception
     */
    List<CostForecastLinesEntity> insertLinesByNewMaterial(List<CostForecastLinesEntity> itemList) throws Exception;

    /**
     * 通过料号更改当前成本预测明细的材料。
     *
     * @param headerId 成本预测表表述
     * @param linesId 要更改的成本预测表明细标识
     * @param materialId 更改后的料ID
     * @param updatedBy 更新者
     * @return 更改后的成本预测表明细相关数据
     * @throws java.lang.Exception
     */
    Map<String, Object> updateLinesByMaterialId(Long headerId, String linesId, Long materialId, Long updatedBy) throws Exception;

    /**
     * 批量删除成本预测明细。
     *
     * @param itemList 要删除的数据
     * @return 删除后的成本预测
     * @throws java.lang.Exception
     */
    List<CostForecastLinesEntity> batchDeleteLines(List<CostForecastLinesEntity> itemList) throws Exception;

    /**
     * 引入成本预测明细。
     *
     * @param headerId 当前成本预测ID
     * @param importedHeaderId 要引入的成本预测ID
     * @param createdBy 作成者
     * @param updatedBy 更新者
     * @return 引入后的成本预测明细
     * @throws java.lang.Exception
     */
    Map<String, Object> importLinesFromOtherCostForecast(Long headerId, Long importedHeaderId,
            Long createdBy, Long updatedBy) throws Exception;

    /**
     * 从剪切板粘贴数据。
     *
     * @param headerId 当前成本预测ID
     * @param copiedLinesId 要粘贴的成本预测明细ID
     * @param materialId 材料ID
     * @param uomId 单位ID
     * @param specification 规格
     * @param orderNo 要粘贴的成本预测明细行号
     * @param createdBy 作成者
     * @param updatedBy 更新者
     * @return 粘贴后的成本预测明细
     * @throws java.lang.Exception
     */
    List<CostForecastLinesEntity> insertFromClipboard(Long headerId, String copiedLinesId, Long materialId,
            Long uomId, String specification, Integer orderNo, Long createdBy, Long updatedBy) throws Exception;

    /**
     * 更新成本预测明细排列顺序。
     *
     * @param itemList 要更改的成本预测明细
     * @return 影响行数
     * @throws java.lang.Exception
     */
    Map<String, Object> updateLinesOrder(List<CostForecastLinesEntity> itemList) throws Exception;
}
